package cn.occgmat.service.impl;

import cn.occgmat.dao.UserPassengerDao;
import cn.occgmat.entity.RbsystemPassenger;
import cn.occgmat.dao.RbsystemPassengerDao;
import cn.occgmat.entity.UserPassenger;
import cn.occgmat.service.RbsystemPassengerService;
import cn.occgmat.service.UserPassengerService;
import cn.occgmat.util.BaseResponse;
import cn.occgmat.util.StatusCode;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 乘客信息表(RbsystemPassenger)表服务实现类
 *
 * @author shimmer
 * @since 2021-03-31 19:54:07
 */
@Service("rbsystemPassengerService")
public class RbsystemPassengerServiceImpl implements RbsystemPassengerService {
    @Resource
    private RbsystemPassengerDao rbsystemPassengerDao;
    @Resource
    private UserPassengerDao userPassengerDao;

    /**
     * 通过ID查询单条数据
     *
     * @param passengerId 主键
     * @return 实例对象
     */
    @Override
    public RbsystemPassenger queryById(Integer passengerId) {
        return this.rbsystemPassengerDao.queryById(passengerId);
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    @Override
    public List<RbsystemPassenger> queryAllByLimit(int offset, int limit) {
        return this.rbsystemPassengerDao.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     * @param rbsystemPassenger 实例对象
     * @return 实例对象
     */
    @Override
    public RbsystemPassenger insert(RbsystemPassenger rbsystemPassenger) {
        this.rbsystemPassengerDao.insert(rbsystemPassenger);
        return rbsystemPassenger;
    }

    /**
     * 修改数据
     *
     * @param rbsystemPassenger 实例对象
     * @return 实例对象
     */
    @Override
    public RbsystemPassenger update(RbsystemPassenger rbsystemPassenger) {
        this.rbsystemPassengerDao.update(rbsystemPassenger);
        return this.queryById(rbsystemPassenger.getPassengerId());
    }

    /**
     * 通过主键删除数据
     *
     * @param passengerId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer passengerId) {
        return this.rbsystemPassengerDao.deleteById(passengerId) > 0;
    }

    /**
     * 添加乘车人信息
     *
     * @param userId    用户ID
     * @param passenger 乘客信息
     * @return 是否成功
     */
    @Override
    public BaseResponse<?> addPassenger(int userId, RbsystemPassenger passenger) {
        // 查看是否已存在乘车人
        RbsystemPassenger rbsystemPassenger = new RbsystemPassenger();
        rbsystemPassenger.setPassengerIdcard(passenger.getPassengerIdcard());
        List<RbsystemPassenger> passengerList1 = this.rbsystemPassengerDao.queryAll(rbsystemPassenger);
        int passengerId;
        if (passengerList1.size() <= 0) {
            // 不存在,插入乘车人表
            this.rbsystemPassengerDao.insert(passenger);
            // 查询乘车人id
            List<RbsystemPassenger> passengerList2 = this.rbsystemPassengerDao.queryAll(rbsystemPassenger);
            passengerId = passengerList2.get(0).getPassengerId();
        } else {
            // 已存在
            passengerId = passengerList1.get(0).getPassengerId();
        }
        // 添加到关系映射表
        UserPassenger userPassenger = new UserPassenger();
        userPassenger.setUserId(userId);
        userPassenger.setPassenger(passengerId);
        List<UserPassenger> userPassengerList = this.userPassengerDao.queryAll(userPassenger);
        if (userPassengerList.size() <= 0) {
            // 不存在，新增关系映射表
            int insertResult = this.userPassengerDao.insert(userPassenger);
            return insertResult > 0 ? new BaseResponse<>(StatusCode.Success) : new BaseResponse<>(StatusCode.Fail);
        } else {
            return new BaseResponse<>(StatusCode.EXISTED);
        }
    }
}
